Improve GtkNotbook behaviour with too little space
authorMatthias Clasen <mclasen@redhat.com>
Mon, 18 May 2009 03:43:26 +0000 (23:43 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 18 May 2009 03:47:30 +0000 (23:47 -0400)
This fixes bug 582488. The patch was provided by Morten Welinder.

gtk/gtknotebook.c

index 9b1c0c3cb803cc968449a05ff823cb581ecfa3b2..2e0e8dd2f6f3cf3e807f812f7e58185b0e8ec118 100644 (file)
@@ -4981,12 +4981,15 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
                                  remaining_space, STEP_NEXT);
        }
 
-      if (*remaining_space <= 0)
+      if (tab_space <= 0 || *remaining_space < 0)
        {
          /* show 1 tab */
          notebook->first_tab = notebook->focus_tab;
          *last_child = gtk_notebook_search_page (notebook, notebook->focus_tab,
                                                  STEP_NEXT, TRUE);
+          page = notebook->first_tab->data;
+          *remaining_space = tab_space - page->requisition.width;
+          *n = 1;
        }
       else
        {
@@ -5073,22 +5076,22 @@ gtk_notebook_calculate_shown_tabs (GtkNotebook *notebook,
                                                                   TRUE);
                }
            }
-       }
 
-      if (*remaining_space < 0) 
-       {
-         /* calculate number of tabs */
-         *remaining_space = - (*remaining_space);
-         *n = 0;
-
-         for (children = notebook->first_tab;
-              children && children != *last_child;
-              children = gtk_notebook_search_page (notebook, children,
-                                                   STEP_NEXT, TRUE))
-           (*n)++;
-       }
-      else 
-       *remaining_space = 0;
+          if (*remaining_space < 0)
+            {
+              /* calculate number of tabs */
+              *remaining_space = - (*remaining_space);
+              *n = 0;
+
+              for (children = notebook->first_tab;
+                   children && children != *last_child;
+                   children = gtk_notebook_search_page (notebook, children,
+                                                        STEP_NEXT, TRUE))
+                (*n)++;
+           }
+          else
+           *remaining_space = 0;
+        }
 
       /* unmap all non-visible tabs */
       for (children = gtk_notebook_search_page (notebook, NULL,